package zhouyang;


import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * 打印结果不是按顺序的，map如果用UUID作为value，本机性能测试，for循环(4150次)之内测不出map不为空的情况
 * debug运行的话，因为少了线程间的竞争，每次打印出来都是顺序执行的相同的结果
 * 且for循环外的map为全量数据
 */
public class CollectionDemo {
    public static void main(String[] args) {
//        Map<String,String> map =new ConcurrentHashMap<>(16);
//        for (int i = 1; i <=8 ; i++) {
//            final int  finalI = i;
//            new Thread(()->{
//            map.put(Thread.currentThread().getName(), "a"+finalI);
//            System.out.println(map+" 第"+ finalI +"次打印");
//            },String.valueOf(i)).start();
//        }
//        System.out.println("for循环外面的map:"+map);

//        List<Integer> list = new CopyOnWriteArrayList<>();//使用ArrayList容易报并发修改异常
//        for (int i = 1; i <=8; i++) {
//            int finalI   = i;
//            new Thread(()->{
//                list.add(Integer.valueOf(Thread.currentThread().getName()));
//                System.out.println("循环内的list"+finalI+list);
//            },String.valueOf(i)).start();
//        }
//        System.out.println("循环外的list："+list);
//        CollectionDemo a = new CollectionDemo();
        Map<String,String> map2 =new ConcurrentHashMap<>(16);
        for (int i = 1; i <=150 ; i++) {
            final int  finalI = i;
            new Thread(()->{
                map2.put(Thread.currentThread().getName(), UUID.randomUUID().toString());
//                System.out.println(map2+" 第"+ finalI +"次打印");
            },String.valueOf(i)).start();
        }
        System.out.println("for循环外面的map2:"+map2);
    }


}
